約 2,260,389 件
https://w.atwiki.jp/boare/pages/86.html
// Render As UTAU.cs for Cadencii // written by kbinani 88 using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; using Boare.Lib.Vsq; using Boare.Lib.AppUtil; using bocoree; public class RenderAsUtau Form { private System.ComponentModel.IContainer components = null; public static string Resampler = ""; public static string WavTool = ""; public static string Singer = ""; public static string LastWave = ""; public static bool InvokeWithWine = false; private Label lblResampler; private TextBox txtSinger; private Button btnSinger; private GroupBox groupConfig; private Button btnWavtool; private Button btnResampler; private TextBox txtWavtool; private TextBox txtResampler; private Label lblWavtool; private Button btnOk; private FolderBrowserDialog folderBrowserDialog; private OpenFileDialog openFileDialog; private PictureBox pictSumbnail; private TextBox txtProf; private GroupBox groupSinger; private Label lblName; private static SaveFileDialog saveFileDialog; private CheckBox chkInvokeWithWine; private Label lblDirectory; private Button btnCancel; struct Phon { public string Lyric; public string FileName; public int ClockLength; public float Tempo; public bool ModeR; public Phon( string lyric, string file_name, int clock_length, float tempo, bool mode_r ) { Lyric = lyric; FileName = file_name; ClockLength = clock_length; Tempo = tempo; ModeR = mode_r; } } /// summary /// 原音設定の引数. /// /summary struct OtoArgs { /// summary /// 第1引数.空文字なので使わない /// /summary public int A1; public int A2; public int A3; public int A4; public int A5; public int A6; } public RenderAsUtau() { InitializeComponent(); txtResampler.Text = Resampler; txtWavtool.Text = WavTool; txtSinger.Text = Singer; folderBrowserDialog.SelectedPath = Singer; chkInvokeWithWine.Checked = InvokeWithWine; saveFileDialog = new SaveFileDialog(); if ( LastWave != "" ) { try { saveFileDialog.InitialDirectory = Path.GetDirectoryName( LastWave ); } catch { } } saveFileDialog.Filter = "Wave File(*.wav)|*.wav|All Files(*.*)|*.*"; bool entered = false; if ( txtResampler.Text != "" ) { try { string dir = Path.GetDirectoryName( txtResampler.Text ); openFileDialog.InitialDirectory = dir; entered = true; } catch { } } if ( !entered txtWavtool.Text != "" ) { try { string dir = Path.GetDirectoryName( txtWavtool.Text ); openFileDialog.InitialDirectory = dir; entered = true; } catch { } } CheckOkButtonAvailable(); UpdateProfile(); ApplyLanguage(); } void ApplyLanguage() { if ( Messaging.Language == "ja" ) { groupSinger.Text = "音源"; groupConfig.Text = "設定"; btnCancel.Text = "取消"; btnOk.Text = "了解"; btnSinger.Text = "探す"; btnResampler.Text = "探す"; btnWavtool.Text = "探す"; chkInvokeWithWine.Text = "wine経由でUTAUコアを起動"; lblDirectory.Text = "音源フォルダ"; } } void UpdateProfile() { if ( Singer == "" || !Directory.Exists( Singer ) ) { pictSumbnail.Image = null; lblName.Text = "(Unknown)"; return; } string character = Path.Combine( Singer, "character.txt" ); if ( File.Exists( character ) ) { using ( cp932reader sr = new cp932reader( character ) ) { string line = ""; while ( (line = sr.ReadLine()) != null ) { string[] spl = line.Split( "=".ToCharArray(), 2 ); if ( spl.Length = 2 ) { if ( spl[0].ToLower() == "name" ) { lblName.Text = spl[1]; } else if ( spl[0].ToLower() == "image" ) { string image = Path.Combine( Singer, spl[1] ); if ( File.Exists( image ) ) { try { pictSumbnail.Image = System.Drawing.Bitmap.FromFile( image ); } catch { } } } } } } } string readme = Path.Combine( Singer, "readme.txt" ); if ( File.Exists( readme ) ) { using ( cp932reader sr = new cp932reader( readme ) ) { txtProf.Text = sr.ReadToEnd(); } } else { txtProf.Text = ""; } } public static bool Edit( VsqFile vsq ) { using ( RenderAsUtau dlg = new RenderAsUtau() ) { if ( dlg.ShowDialog() == DialogResult.OK ) { Singer = dlg.txtSinger.Text; Resampler = dlg.txtResampler.Text; WavTool = dlg.txtWavtool.Text; string script = Path.Combine( Application.StartupPath, Path.Combine( "script", "Render As UTAU.cs" ) );//Script.ScriptPath; string temp_dir = Path.Combine( Path.GetDirectoryName( script ), Path.GetFileNameWithoutExtension( script ) ); #if DEBUG StreamWriter sw = new StreamWriter( Path.Combine( temp_dir, "log.txt" ) ); #endif // 原音設定を読み込み Dictionary string, OtoArgs config = new Dictionary string, OtoArgs (); string singer_name = Path.GetFileName( Singer ); string config_file = Path.Combine( Singer, "oto.ini" ); #if DEBUG sw.WriteLine( "Singer=" + Singer ); sw.WriteLine( "singer_name=" + singer_name ); sw.WriteLine( "config_file=" + config_file ); #endif if ( File.Exists( config_file ) ) { using ( cp932reader sr = new cp932reader( config_file ) ) { string line; while ( sr.Peek() = 0 ) { line = sr.ReadLine(); string[] spl = line.Split( = ); string a1 = spl[0]; string a2 = spl[1]; int index = a1.IndexOf( ".wav" ); a1 = a1.Substring( 0, index ); spl = a2.Split( , ); OtoArgs oa = new OtoArgs(); oa.A1 = 0; oa.A2 = int.Parse( spl[1] ); oa.A3 = int.Parse( spl[2] ); oa.A4 = int.Parse( spl[3] ); oa.A5 = int.Parse( spl[4] ); oa.A6 = int.Parse( spl[5] ); config.Add( a1, oa ); } } } int track = Script.Manager.Selected; List Phon phons = new List Phon (); if ( !Directory.Exists( temp_dir ) ) { Directory.CreateDirectory( temp_dir ); } int count = -1; double sec_end = 0; double sec_end_old = 0; foreach ( VsqEvent item in vsq.Tracks[track].GetNoteEventEnumerator() ) { count++; double sec_start = vsq.SecFromClock( item.Clock ); sec_end_old = sec_end; sec_end = vsq.SecFromClock( item.Clock + item.ID.Length ); float t_temp = (float)(item.ID.Length / (sec_end - sec_start) / 8.0); if ( (count == 0 sec_start 0.0) || (sec_start sec_end_old) ) { double sec_start2 = sec_end_old; double sec_end2 = sec_start; float t_temp2 = (float)(item.Clock / (sec_end2 - sec_start2) / 8.0); phons.Add( new Phon( "R", Path.Combine( Singer, "R.wav" ), item.Clock, t_temp2, true ) ); count++; } string lyric = item.ID.LyricHandle.L0.Phrase; string note = NoteStringFromNoteNumber( item.ID.Note ); #if DEBUG sw.WriteLine( "note=" + note ); #endif string millisec = ((int)((sec_end - sec_start) * 1000) + 50).ToString(); //4_あ_C#4_550.wav string filename = Path.Combine( temp_dir, count + "_" + item.ID.Note + "_" + millisec + ".wav" ); #if DEBUG sw.WriteLine( "filename=" + filename ); sw.WriteLine(); #endif if ( File.Exists( filename ) ) { File.Delete( filename ); } phons.Add( new Phon( lyric, filename, item.ID.Length, t_temp, false ) ); OtoArgs oa = new OtoArgs(); if ( config.ContainsKey( lyric ) ) { oa = config[lyric]; } string arg = "\"" + Path.Combine( Singer, lyric + ".wav" ) + "\" \"" + filename + "\" \"" + note + "\" 100 L " + oa.A2 + " " + millisec + " " + oa.A3 + " " + oa.A4 + " 100 100"; using ( System.Diagnostics.Process p = new System.Diagnostics.Process() ) { p.StartInfo.FileName = (InvokeWithWine ? "wine \"" "\"") + Resampler + "\""; p.StartInfo.Arguments = arg; p.StartInfo.WorkingDirectory = temp_dir; p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; p.Start(); p.WaitForExit(); } } #if DEBUG sw.Close(); #endif string filebase = "temp.wav"; string file = Path.Combine( temp_dir, filebase ); if ( File.Exists( file ) ) { File.Delete( file ); } string file_whd = Path.Combine( temp_dir, filebase + ".whd" ); if ( File.Exists( file_whd ) ) { File.Delete( file_whd ); } string file_dat = Path.Combine( temp_dir, filebase + ".dat" ); if ( File.Exists( file_dat ) ) { File.Delete( file_dat ); } // wavtoolを呼び出す for ( int i = 0; i phons.Count; i++ ) { OtoArgs oa = new OtoArgs(); if ( config.ContainsKey( phons[i].Lyric ) ) { oa = config[phons[i].Lyric]; } // 次の音符の先行発声とオーバーラップを取得 OtoArgs oa_next = new OtoArgs(); if ( i + 1 phons.Count ) { if ( config.ContainsKey( phons[i + 1].Lyric ) ) { oa_next = config[phons[i + 1].Lyric]; } } int mten = oa.A5 + oa_next.A6 - oa_next.A5; string arg = filebase + " \"" + phons[i].FileName + "\" 0 " + phons[i].ClockLength + "@" + string.Format( "{0 f2}", phons[i].Tempo ) + mten.ToString( "+#;-#;0" ); if ( phons[i].ModeR ) { arg += " 0 0"; } else { arg += " 0 5 35 0 100 100 100 " + oa.A6; // エンベロープ } using ( System.Diagnostics.Process p = new System.Diagnostics.Process() ) { p.StartInfo.FileName = (InvokeWithWine ? "wine \"" "\"") + WavTool + "\""; p.StartInfo.Arguments = arg; p.StartInfo.WorkingDirectory = temp_dir; p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; p.Start(); p.WaitForExit(); } } // 波形とヘッダを結合 using ( FileStream fs = new FileStream( file, FileMode.Create ) ) { string[] files = new string[] { file_whd, file_dat }; int buflen = 512; byte[] buff = new byte[buflen]; for ( int i = 0; i files.Length; i++ ) { using ( FileStream fs2 = new FileStream( files[i], FileMode.Open ) ) { int len = fs2.Read( buff, 0, buflen ); while ( len 0 ) { fs.Write( buff, 0, len ); len = fs2.Read( buff, 0, buflen ); } } } } // 後片付け foreach ( Phon ph in phons ) { if ( !ph.ModeR ) { if ( File.Exists( ph.FileName ) ) { File.Delete( ph.FileName ); } } } if ( File.Exists( file_whd ) ) { File.Delete( file_whd ); } if ( File.Exists( file_dat ) ) { File.Delete( file_dat ); } if ( saveFileDialog.ShowDialog() == DialogResult.OK ) { if ( File.Exists( saveFileDialog.FileName ) ) { File.Delete( saveFileDialog.FileName ); } LastWave = saveFileDialog.FileName; File.Move( file, saveFileDialog.FileName ); } else { File.Delete( file ); } return true; } else { return false; } } } private static string NoteStringFromNoteNumber( int note_number ) { int odd = note_number % 12; string head = (new string[] { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" })[odd]; return head + (note_number / 12 - 1); } protected override void Dispose( bool disposing ) { if ( disposing (components != null) ) { components.Dispose(); } base.Dispose( disposing ); } private void InitializeComponent() { this.lblResampler = new System.Windows.Forms.Label(); this.txtSinger = new System.Windows.Forms.TextBox(); this.btnSinger = new System.Windows.Forms.Button(); this.groupConfig = new System.Windows.Forms.GroupBox(); this.chkInvokeWithWine = new System.Windows.Forms.CheckBox(); this.btnWavtool = new System.Windows.Forms.Button(); this.btnResampler = new System.Windows.Forms.Button(); this.txtWavtool = new System.Windows.Forms.TextBox(); this.txtResampler = new System.Windows.Forms.TextBox(); this.lblWavtool = new System.Windows.Forms.Label(); this.btnOk = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button(); this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); this.pictSumbnail = new System.Windows.Forms.PictureBox(); this.txtProf = new System.Windows.Forms.TextBox(); this.groupSinger = new System.Windows.Forms.GroupBox(); this.lblName = new System.Windows.Forms.Label(); this.lblDirectory = new System.Windows.Forms.Label(); this.groupConfig.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictSumbnail)).BeginInit(); this.groupSinger.SuspendLayout(); this.SuspendLayout(); // // lblResampler // this.lblResampler.AutoSize = true; this.lblResampler.Location = new System.Drawing.Point( 11, 29 ); this.lblResampler.Name = "lblResampler"; this.lblResampler.Size = new System.Drawing.Size( 55, 12 ); this.lblResampler.TabIndex = 0; this.lblResampler.Text = "resampler"; // // txtSinger // this.txtSinger.Location = new System.Drawing.Point( 98, 176 ); this.txtSinger.Name = "txtSinger"; this.txtSinger.Size = new System.Drawing.Size( 215, 19 ); this.txtSinger.TabIndex = 2; this.txtSinger.TextChanged += new System.EventHandler( this.txtSinger_TextChanged ); // // btnSinger // this.btnSinger.Location = new System.Drawing.Point( 319, 174 ); this.btnSinger.Name = "btnSinger"; this.btnSinger.Size = new System.Drawing.Size( 56, 23 ); this.btnSinger.TabIndex = 3; this.btnSinger.Text = "Browse"; this.btnSinger.UseVisualStyleBackColor = true; this.btnSinger.Click += new System.EventHandler( this.btnSinger_Click ); // // groupConfig // this.groupConfig.Controls.Add( this.chkInvokeWithWine ); this.groupConfig.Controls.Add( this.btnWavtool ); this.groupConfig.Controls.Add( this.btnResampler ); this.groupConfig.Controls.Add( this.txtWavtool ); this.groupConfig.Controls.Add( this.txtResampler ); this.groupConfig.Controls.Add( this.lblWavtool ); this.groupConfig.Controls.Add( this.lblResampler ); this.groupConfig.Location = new System.Drawing.Point( 14, 236 ); this.groupConfig.Name = "groupConfig"; this.groupConfig.Size = new System.Drawing.Size( 394, 106 ); this.groupConfig.TabIndex = 4; this.groupConfig.TabStop = false; this.groupConfig.Text = "Configuration"; // // chkInvokeWithWine // this.chkInvokeWithWine.AutoSize = true; this.chkInvokeWithWine.Location = new System.Drawing.Point( 13, 76 ); this.chkInvokeWithWine.Name = "chkInvokeWithWine"; this.chkInvokeWithWine.Size = new System.Drawing.Size( 110, 16 ); this.chkInvokeWithWine.TabIndex = 8; this.chkInvokeWithWine.Text = "Invoke with Wine"; this.chkInvokeWithWine.UseVisualStyleBackColor = true; this.chkInvokeWithWine.CheckedChanged += new System.EventHandler( this.chkInvokeWithWine_CheckedChanged ); // // btnWavtool // this.btnWavtool.Location = new System.Drawing.Point( 319, 49 ); this.btnWavtool.Name = "btnWavtool"; this.btnWavtool.Size = new System.Drawing.Size( 56, 23 ); this.btnWavtool.TabIndex = 7; this.btnWavtool.Text = "Browse"; this.btnWavtool.UseVisualStyleBackColor = true; this.btnWavtool.Click += new System.EventHandler( this.btnWavtool_Click ); // // btnResampler // this.btnResampler.Location = new System.Drawing.Point( 319, 24 ); this.btnResampler.Name = "btnResampler"; this.btnResampler.Size = new System.Drawing.Size( 56, 23 ); this.btnResampler.TabIndex = 5; this.btnResampler.Text = "Browse"; this.btnResampler.UseVisualStyleBackColor = true; this.btnResampler.Click += new System.EventHandler( this.btnResampler_Click ); // // txtWavtool // this.txtWavtool.Location = new System.Drawing.Point( 77, 51 ); this.txtWavtool.Name = "txtWavtool"; this.txtWavtool.Size = new System.Drawing.Size( 236, 19 ); this.txtWavtool.TabIndex = 6; this.txtWavtool.TextChanged += new System.EventHandler( this.txtWavtool_TextChanged ); // // txtResampler // this.txtResampler.Location = new System.Drawing.Point( 77, 26 ); this.txtResampler.Name = "txtResampler"; this.txtResampler.Size = new System.Drawing.Size( 236, 19 ); this.txtResampler.TabIndex = 5; this.txtResampler.TextChanged += new System.EventHandler( this.txtResampler_TextChanged ); // // lblWavtool // this.lblWavtool.AutoSize = true; this.lblWavtool.Location = new System.Drawing.Point( 11, 54 ); this.lblWavtool.Name = "lblWavtool"; this.lblWavtool.Size = new System.Drawing.Size( 44, 12 ); this.lblWavtool.TabIndex = 1; this.lblWavtool.Text = "wavtool"; // // btnOk // this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; this.btnOk.Location = new System.Drawing.Point( 252, 356 ); this.btnOk.Name = "btnOk"; this.btnOk.Size = new System.Drawing.Size( 75, 23 ); this.btnOk.TabIndex = 6; this.btnOk.Text = "OK"; this.btnOk.UseVisualStyleBackColor = true; // // btnCancel // this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Location = new System.Drawing.Point( 333, 356 ); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size( 75, 23 ); this.btnCancel.TabIndex = 7; this.btnCancel.Text = "Cancel"; this.btnCancel.UseVisualStyleBackColor = true; // // openFileDialog // this.openFileDialog.FileName = "openFileDialog1"; // // pictSumbnail // this.pictSumbnail.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.pictSumbnail.Location = new System.Drawing.Point( 18, 52 ); this.pictSumbnail.Name = "pictSumbnail"; this.pictSumbnail.Size = new System.Drawing.Size( 100, 100 ); this.pictSumbnail.TabIndex = 8; this.pictSumbnail.TabStop = false; // // txtProf // this.txtProf.BackColor = System.Drawing.SystemColors.Window; this.txtProf.Location = new System.Drawing.Point( 131, 47 ); this.txtProf.Multiline = true; this.txtProf.Name = "txtProf"; this.txtProf.ReadOnly = true; this.txtProf.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.txtProf.Size = new System.Drawing.Size( 247, 111 ); this.txtProf.TabIndex = 9; this.txtProf.WordWrap = false; // // groupSinger // this.groupSinger.Controls.Add( this.lblDirectory ); this.groupSinger.Controls.Add( this.lblName ); this.groupSinger.Controls.Add( this.pictSumbnail ); this.groupSinger.Controls.Add( this.txtProf ); this.groupSinger.Controls.Add( this.txtSinger ); this.groupSinger.Controls.Add( this.btnSinger ); this.groupSinger.Location = new System.Drawing.Point( 14, 12 ); this.groupSinger.Name = "groupSinger"; this.groupSinger.Size = new System.Drawing.Size( 394, 218 ); this.groupSinger.TabIndex = 10; this.groupSinger.TabStop = false; this.groupSinger.Text = "Singer"; // // lblName // this.lblName.AutoSize = true; this.lblName.Font = new System.Drawing.Font( "MS UI Gothic", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128)) ); this.lblName.Location = new System.Drawing.Point( 21, 23 ); this.lblName.Name = "lblName"; this.lblName.Size = new System.Drawing.Size( 74, 13 ); this.lblName.TabIndex = 10; this.lblName.Text = "(Unknown)"; // // lblDirectory // this.lblDirectory.AutoSize = true; this.lblDirectory.Location = new System.Drawing.Point( 11, 179 ); this.lblDirectory.Name = "lblDirectory"; this.lblDirectory.Size = new System.Drawing.Size( 81, 12 ); this.lblDirectory.TabIndex = 11; this.lblDirectory.Text = "voice directory"; // // RenderAsUtau // this.AcceptButton = this.btnOk; this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.btnCancel; this.ClientSize = new System.Drawing.Size( 420, 393 ); this.Controls.Add( this.groupSinger ); this.Controls.Add( this.btnCancel ); this.Controls.Add( this.btnOk ); this.Controls.Add( this.groupConfig ); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RenderAsUtau"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Render As UTAU"; this.groupConfig.ResumeLayout( false ); this.groupConfig.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictSumbnail)).EndInit(); this.groupSinger.ResumeLayout( false ); this.groupSinger.PerformLayout(); this.ResumeLayout( false ); } private void btnSinger_Click( object sender, EventArgs e ) { if ( folderBrowserDialog.ShowDialog() == DialogResult.OK ) { txtSinger.Text = folderBrowserDialog.SelectedPath; UpdateProfile(); } } private void CheckOkButtonAvailable() { if ( !File.Exists( Resampler ) || !File.Exists( WavTool ) || !Directory.Exists( Singer ) ) { btnOk.Enabled = false; } else { btnOk.Enabled = true; } } private void btnResampler_Click( object sender, EventArgs e ) { if ( openFileDialog.ShowDialog() == DialogResult.OK ) { txtResampler.Text = openFileDialog.FileName; } } private void btnWavtool_Click( object sender, EventArgs e ) { if ( openFileDialog.ShowDialog() == DialogResult.OK ) { txtWavtool.Text = openFileDialog.FileName; } } private void txtResampler_TextChanged( object sender, EventArgs e ) { Resampler = txtResampler.Text; CheckOkButtonAvailable(); } private void txtWavtool_TextChanged( object sender, EventArgs e ) { WavTool = txtWavtool.Text; CheckOkButtonAvailable(); } private void txtSinger_TextChanged( object sender, EventArgs e ) { Singer = txtSinger.Text; CheckOkButtonAvailable(); UpdateProfile(); } private void chkInvokeWithWine_CheckedChanged( object sender, EventArgs e ) { InvokeWithWine = chkInvokeWithWine.Checked; } }
https://w.atwiki.jp/libutau/
Lib UTAU とは? Lib UTAU でできること 必要環境 ライセンス ライブラリ作者 Lib UTAU とは? 「Lib UTAU」は、「UTAU プラグイン開発支援用 C++ クラスライブラリ」です。 UTAU 本体とプラグインとのデータの授受を手軽に行えるようにすることで、プラグイン開発の手間を軽減し、開発者の負担を減らします。 Lib UTAU でできること Lib UTAU には以下のような機能があります。 UTAU 本体から渡される一時ファイル(当ヘルプでは「パイプファイル」と呼称します)のパース(解析) セクション(音符)の追加・削除・置換 エントリ(音符のプロパティ)の取得・設定 エンベロープやピッチを親しみやすい形式でアクセス可能にする 食い込み補正を考慮した音符の長さ、先行発声、オーバーラップの算出 変更結果の UTAU 本体への返却(パイプファイルへの書き戻し) UTAU 本体のバージョンによって変わる、パイプファイルの仕様の違いを吸収 原音設定のパース(解析) 先行発声やオーバーラップを扱う際は、原音設定の値も考慮 プラグイン開発で必ず使う基礎的な機能を一通り盛り込んであります。データを生の形式で扱える他、使いやすい形にアレンジしてアクセスできるようにもしてありますので、プラグインを一から開発するよりもだいぶ開発に要する時間を短縮できるのではないかと思います。 必要環境 Lib UTAU は 標準 C++ Windows API で構築していますので、これらをサポートする環境であれば利用できるのではないかと思います。 Windows API は、 FindFirstFile() FindNextFile() PathFileExists() というファイル検索系のものを用いています。 このため、開発環境によっては、ライブラリ「Shlwapi.lib」のリンクが必要になる場合があります。 ライブラリ作者は主に C++ Builder XE で動作を確認しており、また、Visual C++ 2010 Express でもある程度の動作確認をしています。 ライセンス Lib UTAU は、 クリエイティブ・コモンズ・ライセンス(表示 - 非営利 - 継承 2.1 日本) http //creativecommons.org/licenses/by-nc-sa/2.1/jp/ の下に公開されています。派生作品を含め営利目的で使用したい場合は事前にご相談下さい。 Lib UTAU の派生作品(Lib UTAU を用いたアプリケーションなど)を公開する場合も自動的に上記ライセンスを適用することとなりますが、例外規定として、 クリエイティブ・コモンズ・ライセンス(表示 - 非営利 - 改変禁止 2.1 日本) http //creativecommons.org/licenses/by-nc-nd/2.1/jp/ で公開することも可とします。 ライブラリ作者 作者 SHINTA ホームページ http //www2u.biglobe.ne.jp/~shinta/
https://w.atwiki.jp/utau2008/pages/40.html
/*********************************************** UTAU-Synth 言語リソース Ver 1.0.0.b?? / * "[コメント]" * / "messageXXXX"="[テキスト]"; [コメント]は弄らずに[テキスト]の部分だけを書き換え ***********************************************/ /* "設定は変更されています。保存しますか?" */ "message1001"="Setting has been changed. Save it?"; /* "保存する" */ "message1002"="Save"; /* "破棄する" */ "message1003"="Discard"; /* "キャンセル" */ "message1004"="Cancel"; /* "ファイルを選んでエントリーを追加" */ "message1005"="Select a file and add an entry"; /* "一覧に無い音声ファイルを検索してエントリを追加します" */ "message1006"="Search for voice files that are not registered, and add them."; /* "試用ライセンス期限まであと %d日" */ "message1007"="License expires after %d days."; /* "試用ライセンス期限切れ" */ "message1008"="License has expired."; /* "ライセンスされてます" */ "message1009"="It is licensed."; /* "ライセンスコードは既に使われています" */ "message1010"="This license code is already in use."; /* "ライセンスコード有効期限切れ" */ "message1011"="License code has expired."; /* "無効なライセンス情報です" */ "message1012"="Invalid license information"; /* "ライセンスが無効です" */ "message1013"="License has been disabled"; /* "ライセンス情報が破損しています" */ "message1014"="License information is corrupted"; /* "閉じる" */ "message1015"="Close"; /* "試用中" */ "message1016"="Trial License"; /* "試用する" */ "message1017"="Try it"; /* "ライセンス確認中..." */ "message1018"="Checking license information..."; /* "通信中..." */ "message1019"="Processing..."; /* "ライセンスが確認できませんでした" */ "message1020"="Failed in license check."; /* "開始する" */ "message1021"="Start"; /* "プロジェクトは変更されています。保存しますか?" */ "message1022"="Project has been changed. Save it?"; /* "保存" */ "message1023"="Save"; /* "変更を破棄" */ "message1024"="Discard the changes"; /* "プロジェクトの保存" */ "message1025"="Saving this project"; /* "古い形式では保存出来ない機能を使用しています。" */ "message1026"="Old format has been selected. The save may be incomplete."; /* "ust2.0(Unicode)で保存する" */ "message1027"="Save in ust2.0(Unicode)"; /* "かまわず保存する" */ "message1028"="Save it"; /* "選択しているチャンネルだけをレンダリングします" */ "message1029"="Renders only the selected channel."; /* "全てのチャンネルを合成するにはチャンネルツールを非表示にします" */ "message1030"="Please hide the channel tool, if want to synthesize all channels."; /* "表示中のチャンネルだけをレンダリングします" */ "message1031"="Render a channel that is displayed."; /* "レンダリング対象はチャンネル %d です" */ "message1032"="You tried render the channel %d ."; /* "レンダリングを中断しました。" */ "message1033"="Stopped rendering."; /* "レンダリングが失敗しました。" */ "message1034"="Rendering failed."; /* "レンダリングが完了しました。" */ "message1035"="Rendering is complete."; /* "名称未設定.wav" */ "message1036"="No Name.wav"; /* "SMFファイルへエクスポート" */ "message1037"="Export to SMF-File"; /* "SMFファイルをインポート" */ "message1038"="Import from SMF-File"; /* "増減値" */ "message1039"="Value"; /* "前回異常終了したプロジェクトがあります。" */ "message1040"="There is a autosaved-project under the abnormal termination."; /* "読み込む(Load project)" */ "message1041"="Load project"; /* "破棄する(Discard)" */ "message1042"="Discard"; /* "音源情報が見つかりません" */ "message1043"="Can not find Voicebank information."; /* "インストール情報が不正、または見つかりません" */ "message1044"="Installation information is incorrect or can not find."; /* "音符の削除" */ "message1045"="Delete Note"; /* "音符の追加" */ "message1046"="Add Note"; /* "音符の移動" */ "message1047"="Move Note"; /* "音符の変更" */ "message1048"="Modify Note"; /* "長さの変更" */ "message1049"="Change Length"; /* "ピッチの変更" */ "message1050"="Change Pitch"; /* "ビブラートの変更" */ "message1051"="Change Vibrato"; /* "エンベロープの変更" */ "message1052"="Change Envelope"; /* "ボリュームの変更" */ "message1053"="Change Volume"; /* "テンポの変更" */ "message1054"="Change Tempo"; /* "歌詞の変更" */ "message1055"="Change Lyrics"; /* "拍子記号" */ "message1056"="Time Signature"; /* "クォンタイズ" */ "message1057"="Quantize"; /* "音符の分割" */ "message1058"="Split Note"; /* "音符の結合" */ "message1059"="Bind Notes"; /* "%@を元に戻す" */ "message1060"="Undo %@ "; /* "元に戻す" */ "message1061"="Undo"; /* "%@をやり直し" */ "message1062"="Redo %@ "; /* "やり直し" */ "message1063"="Redo"; /* "音符のデフォルト設定(α版)" */ "message1064"="Default setting of notes(α edition)"; /* "音符のプロパティ(α版)" */ "message1065"="Note Property(α edition)"; /* "歌詞が不正です" */ "message1066"="Illegal lyrics"; /* "拍子記号を追加..." */ "message1067"="Add Time Signature..."; /* "拍子記号の変更..." */ "message1068"="Change Time Signature..."; /* "テンポ値が不正です" */ "message1069"="Illegal Tempo value"; /* "ラベル名が不正です" */ "message1070"="Illegal Label name"; /* "このアーカイブタイプはインストール出来ません" */ "message1071"="Can not install this type of archive."; /* "種類 %@\n名前 %@\n説明 \n %@" */ "message1072"="Type %@\nName %@\nDescription \n %@"; /* "音源名 %@\nパッケージ %@\n説明 \n %@\n\n音源 %@ のパッケージ %@ は既に存在しています。" */ "message1073"="Voicebank %@\nPackage %@\nDescription \n %@\n\nVoicebank %@ , packege %@ is already exists."; /* "UTAU音源のインストール" */ "message1074"="Install this voicebank"; /* " %@ に変更" */ "message1075"="Change to %@ "; /* "上書きする" */ "message1076"="Overwrite"; /* "インストール" */ "message1077"="Install"; /* "音源名 %@\nパッケージ %@\n説明 \n %@" */ "message1078"="Voicebank %@\nPackage %@\nDescription \n %@"; /* "インストールは中断されました" */ "message1079"="Installation has been aborted."; /* "この音源に切り替える" */ "message1080"="Switch to this voicebank"; /* "音源が無効です" */ "message1081"="Voicebank is not loaded"; /* "音符がありません" */ "message2002"="No Notes."; /* "原音パスを設定してください" */ "message2003"="Please select Voicebank."; /* "原音エントリーがありません" */ "message2004"="No settings of Voicebank."; /* "原音エントリーがありません(2)" */ "message2005"="No settings of Voicebank(2)"; /* "レンダリングできる音符がありません" */ "message2006"="No notes to render."; /* "レンダリング対象の音符がありません" */ "message2007"="No notes to render."; /* "ファイルが開けません。" */ "message2008"="Can not open file."; /* "レンダリングする音符がありません" */ "message2009"="No notes to render.";
https://w.atwiki.jp/vpvpwiki/pages/361.html
モデルデータ>UTAU関連>重音テト モデルデータとはMMD ver3.x~対応の「.pmd」とMMD ver7.31~対応の「.pmx」を指します。 このページではUTAUの音声ライブラリをもつキャラクター「重音テト」を扱います。 ニコニコ動画では「MMDモデル配布あり」タグでユーザーモデルが配布されている動画が検索できます。 ジャンルやキャラタグ等と併せて絞り込むなどして活用しましょう。 UTAU関連モデル重音テト 重音テト デフォルメ系 重音テト(初代テト) 重音テッド ニコニコ大百科でUTAU関連モデル コメント 各種データ(ユーザーモデル含む)の取扱いについては、著作権等の権利にご注意願います。また「作成者」は、必ずしもその配布物の著作権者であるとは限りません。 共通の各種注意事項(直リンク不可のアップローダのDL方法等)は配布物についてを参照ください。 掲載順序は各データ初版の発表日が古い順です。記事追加の際には、該当項目の最下行へお願いします。 UTAU関連モデル 重音テト 公式重音テト・オフィシャルサイト ニコニコミュ重音テトコミュ [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 重音テト わたべななみ 3.21 2011/07/14 配布先 紹介動画 モデル改造に関してPassは紹介動画参照 重音テトact2 5.122.12a1.31 2011/09/26 配布先 制服、チャイナ、スクール水着Passは紹介動画参照 重音テトact2.5 1.0 2011/10/10 配布先 ゴス和服Passは紹介動画参照 Lat式改変テト Lat/ula 10 2014/04/01 配布先 配布動画参考動画 Lat式ミク2.2からの改変 Lat式改変テトWPS(WPS=わさびPスペシャル) 修正改造 サンタさんわさびP他 2011/04/05 紹介動画非公開 標準、白、セーラーの3体コミュ生提案をUla氏版に反映詳細はReadme参照 重音テト_アノマロver アノマロ 2009/07/16 配布先 物理演算用設定済 アノマロテト モデル アノマロ変換 とくもと 2009/02/28 配布先 修正版 2009/05/03 配布先 かさねてとじゅういっさい あにまさ 配布先 融合前のテトさん11歳※infoseek.co.jp終了につきファイル消失 重音テト 爆盛り版 そうろうP 2010/03/31 配布先 ファイル消失 そうろう式重音テト(Basic Version) 1.10 2011/08/19 配布先 モモ誕2011に際して制作公開桃音モモファンサイト「ももふぁん」にて公開中 [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 重音テト ゴシックM風 にがもん 2010/04/03 配布先 pass Tg33ng 重音テト JJJの奇太郎 001 2010/05/03 配布先 002 2010/07/30 配布先 えと式重音テト えと 2011/05/01 配布先 紹介静画 ※loda.jp終了につきファイル消失BowlRollのえと氏ページ 銀獅式重音テト 銀獅 1.02 2011/05/04 配布先 標準仕様とホワイト仕様の2体セットReadmeに使い方説明等詳細 銀獅/Mana 1.51 2014/04/21 配布先 銀獅式重音テト-Sailor夏服 銀獅/猫ナ/Mana 1.01 2014/04/13 配布先 銀獅式初音ミク_ver1.52改変 重音テト otype 2011/07/15 配布先 UTAU三人娘、和音マコ同梱 大和式改変重音テト 救世主 2011/11/15 配布先 海外組 大和式改変テト beat32lop 1.42 2012/11/12 配布先 ノーマル、9S、9S-Dの3種 重音テト マシシP 1.7 2012/11/02 配布先 pmx 2.0 2014/09/12 配布先 重音テト キメラタイプ 1.0 2012/12/09 配布先 pmx テトさん ume. 0.3 2012/07/22 配布先 配布静画 静画リンク切れ (非公開) [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 重音テトzeze式 zeze 1.0 2012/10/10 配布先 pmx 重音テト 矢板 鮭 1.32 2013/05/04 配布先 テッド同梱 配布停止 重音テト 2 2014/04/19 配布先 配布停止 重音テト 紫苑 1.6.0 2012/12/31 配布先 DLキーは配布動画説明参照 Tda式改変AP風テト Tda/サイキョー 1.00d 2013/01/10 配布先 passは静画説明参照 Tda式改変テト・アペンド Tda/かめ吉(ダヨーP) 1.04 2013/04/01 配布先 配布動画 DLキーは動画説明参照 TDA Teto Amulet 改変 Tda[H]estiaSama 2.0 2013/06/24 配布先 Tda式ミク Ver.1.0改変モデルタグ検索『Tda式重音テト』 まめる式テト まめる 1.5.5 2013/05/26 配布先 配布動画 パスは動画参照動画削除 まれよん式重音テト まれよん(MA04) 1.1.0 2014/05/25 配布先 DLキーは静画説明参照 重ね毛子 天使炎 2009/06/14 配布先 MMD v5beta 専用となります剛体付き物理演算モデル にぼテトさん 山本/lat/ula/maruya 1.3.8 2013/08/10 配布終了 配布静画 山本/maruya 2.2 2013/09/09 配布先 DLキーは静画説明参照 [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 キツネツキ式重音テト キツネツキ 1.00 2013/06/13 配布先 DLキーは動画参照 けみか式重音テト けみか 2.5 2015/05/16 配布先 DLキーは静画説明参照 Fair式 重音テト フェアネス 1.01 2014/01/15 配布先 DLキーは動画説明参照 あぴミク改変あぴテトIS ままま/アラン・スミシー/大葉真琴 1.0.5 2013/12/28 配布先 デフォルト服/ライブ服同梱 Ula式改変“重音テト” ula/Do_Crow β 2014/01/03 配布先 DLキーは静画参照 ミコト式テト 月狐ミコト 1.02 2014/03/20 配布先 配布静画 ミコト式初音ミクをベースに重音テト化したモデル配布先削除・静画リンク切れ (非公開) ゆきはね11式改変テトblack&white ゆきはね/US4958 1.02 2014/03/30 配布先 DLキーは静画説明参照 それなり式テト さらりん 2.0 2014/03/31 配布先 重音テト mm39 1.0.0 2014/04/18 配布先 澪姉式テト 澪姉 200NN 2014/05/02 配布先 配布動画 ファイル消失、動画削除 [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 楓塩式重音テト メイプルソルト 1.00 2014/05/17 配布先 配布動画 DLキーは静画または動画説明参照 ユウタロウ式重音テト ユウタロウ 1.00 2014/06/02 配布先 ちびあぴテト ベース:ままま/ Lat改変者:リュヒルドさん改変者:べ・ルル三錠 1.05 2015/01/15 配布先 パスワードは動画説明参照 Appearance Teto_Ver_XX4あぴテト ベース:ままま改変者:リュヒルドさん改変者:べ・ルル三錠 XX4 2022/01/11 配布先 パスワードは動画説明参照 あぴテトサマーライト ベース:ままま/ nakao改変者:リュヒルドさん改変者:べ・ルル三錠 1.06 2022/01/13 配布先 あぴミク改変パスワードは動画説明参照 あぴテト01 ベース:ままま改変者:リュヒルドさん改変者:べ・ルル三錠 09 2024/03/29 配布先 あぴミク改変パスワードは動画説明参照 あぴテト01Ex ベース:ままま改変者:リュヒルドさん改変者:べ・ルル三錠 02 2022/01/12 配布先 パスワードは動画説明参照 Nari式重音テト Nari 1.51 2015/08/05 配布先 配布終了 カイ式重音テト カイ 1.02 2016/01/02 配布先 ・passは配布動画説明欄参照・色変更モーフ・キメラ覚醒モーフで変身可能・4モデル同梱(歌唱時のリップ形状が異なる2種x袖の有無)・全身に便利なダミーボーン・アクセサリ「魔翼」同梱 カイ式重音テト【パイロット】 1.02 2017/07/27 配布先 ・passは配布動画説明欄参照・色変更モーフ・キメラ覚醒モーフで変身可能・4モデル同梱(歌唱時のリップ形状が異なる2種xメットの有無)・全身に便利なダミーボーン・アクセサリ:ヘルメット、魔翼 重音テト デフォルメ系 [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 ねんどろいど風重音テト モデル エナメルP変換 suttoko 2.1 2009/09/06 配布先配布停止中 ねんどろいど風FT(フルテクスチャ)重音テト 1.11 2009/09/06 ねんどろモモ、デフォ子と同質なのは、このFT版 モデル エナメルP変換 suttoko修正 でで 1.11改 2009/09/06 重音テト 書割 軽量モデル。「UTAU関連 複数セット配布」の"【セット配布】桃音モモ、重音テト、デフォ子、手久野キキ、白滝イト、アイ・テノゴール"を参照 ブロックなテト(Q-BLOCK風テト) MasterK 「モデルデータ/UTAU関連 複数セット配布」の"【セット配布】Q-BLOCK風・ブロックな…"を参照 蓮根テト tatmos 2010/09/18 配布先 レンコンに穴を開けるお仕事をする蓮根さん達の仲間に。 ニコニコミュ「MMD蓮根ミク」 CHAN×CO氏風重音テト タワシ 2011/04/20 配布先 てとねぇ マシシ 2013/03/11 配布先 えびてんさんの動画のキャラ 渦音P式テトさん 渦音Pフロムザアンダーグラウンド 2014/04/01 配布先 重音テト(初代テト) [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 初代様 ツブラヤP 2010/03/30 ファイル消失 参考(ニコニコ大百科) ばね式初代テトさん ばね 2012/8/25 配布先 重音テッド 重音テトの二次創作キャラクター 公式重音テト・オフィシャルサイト>重音テッドについて [部分編集] 名称 作成者 Ver 更新日 配布 リンク 備考 重音テッド otype 2010/02/01 配布先 配布条件あり。添付ドキュメント参照 2011/12/15 配布先 軍服+黒服コス、黒服モモテト付き ▲上へ ニコニコ大百科でUTAU関連モデル VPVP wiki以外でモデルについてまとめたページへのリンク MMDUTAUモデル(重音テト関連) MMDUTAUモデル コメント 情報の提供やリンク切れの報告、記事の訂正など、編集に関わる内容でご利用下さい。 新規制作・再アップの要望や、個々のデータに関する質問(使用方法など)は、VPVP wikiではお答えいたしかねます。 (不要なコメントは削除される場合があります) 編集は誰でも可能ですが、編集方法が分からず情報の追加・訂正ができない場合などは、配布動画のURLなどを添えてご記入ください。 VPVP wiki管理人の返信が必要である場合は、「このwikiの管理者に連絡」をご利用ください。 参考ページ リンク切れかな?と思ったら(403Error) 他のモデル・アクセサリ紹介サイトへのリンク 編集時のスパムエラーに関する情報 【お願い】 コメント欄に「お借りします」等の書き込みをされるのは、提供情報が流れてしまったり、埋もれてしまう原因になるため、お控えくださいますようお願いいたします。 一方で、データ制作者様のモチベーション向上にもなりますので、制作者様がコメントを目にする機会が多い配布動画などの配布ページに温かいコメントを残されることをお勧めします。 皆様のご理解とご協力をお願い申し上げます。 名前 コメント すべてのコメントを見る 閨都、継音ライ追加しました -- 2018-04-14 22 15 39 カゼヒキ、緑音アヤム追加しました。型破ルトの配布先修正しました -- 2018-04-11 21 06 37 カイ式重音テト【パイロット】、カイ式デフォ子【パイロット】、カイ式桃音モモ【パイロット】、配布となったので追記しました。 -- 2017-07-28 06 33 22 画像がNO DATAになってしまうのはどうしてでしょう?見たところおかしなところはないような? -- 2017-05-29 09 25 11 澪姉式惡音キン掲載しました。 -- 2017-05-29 09 24 20 「大葉式テイ様改変天月りよん」2月21日に配布開始となっているので追記しました。 -- 2017-02-24 08 44 39 そうろうPさんのモデルはもう配布終了したのでしょうか? -- 2016-05-18 23 26 22 カイ式波音リツ全モデル、愛野ハテ、piggy、それぞれアップデートがあったので反映しました。 -- 2016-05-02 08 45 55 カイ式桃音モモ、ver1.02へのバージョンアップがあったので反映しました。 -- 2016-04-26 22 16 04 カイ式piggy、配布開始となったので追記しました。 -- 2016-04-23 19 03 52 モデルデータ / ユーザーモデル紹介 MMD付属/VOCALOID/ボカロ派生/UTAU/音声ソフト ゲーム/THE IDOLM@STER・東方Project マンガ/アニメ/映画・本・放送/機械 / その他商業系 オリジナル/その他
https://w.atwiki.jp/utau2008/pages/3.html
関連スレ ソフトウェア板 歌声合成ツール UTAU 歌声合成ツール UTAU part2 歌声合成ツール UTAU part3 歌声合成ツール UTAU part4 歌声合成ツール UTAU part5 歌声合成ツール UTAU part6 歌声合成ツール UTAU part7 歌声合成ツール UTAU part9 DTM板 歌唱ソフトAquesTone・UTAU 【UTAU・AquesTone】歌唱合成ソフト 2【SugarCape】 【UTAU・AquesTone】歌唱合成ソフト 3【SugarCape】 【UTAU・AquesTone】歌唱合成ソフト 4【SugarCape】 【UTAU・AquesTone】歌唱合成ソフト 5【SugarCape】←現行本スレ youtube板 人力VOCALOID総合スレ 【人力VocaloidUTAU】ボカラン除外作品系スレ【くまうたDS10音MAD】 【初音ミクなど】最底辺制作者のスレ 27再生目【VOCALOID】 【VOCALOID初音ミク等】超初心者スレ【ここがスタート地点】2 【UTAU・AquesTone】歌唱合成ソフト 3【SugarCape】 【UTAU・AquesTone】歌唱合成ソフト 6【SugarCape】 【UTAUくまうたSinsy】音声合成総合 7【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 8【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 9【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 10【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 11【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 12【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 13【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 14【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 15【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 16【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 17【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 18【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 19【人力ボカロSoftalk月読】 【UTAUくまうたSinsy】音声合成総合 20【人力ボカロSoftalk月読】 ←現行 ※最近は2chのスレよりtwitterの方が本流なのでそちらを追うのが良いかもしれません。 創作発表板 【本家や派生】ボカロ関連キャラ総合スレ2【なんでもあり】 VOCALOID関連キャラ総合スレ3【なんでもあり】 VOCALOID関連キャラ総合スレ7【なんでもアリ】 【メモ】互助会URL http //www9.uploader.jp/home/utaou/ http //jbbs.livedoor.jp/computer/41650/
https://w.atwiki.jp/libutau/pages/19.html
サンプルプログラムの解説 まずは TUtauData [#SETTING] セクションの管理 音符セクションの管理 パイプファイルのバージョン間の相違を吸収 値の設定 パイプファイルへの書き戻し 追記予定 サンプルプログラムの解説 Lib UTAU に同梱してあるサンプルプログラムについて、その内容を解説します。 なお、ここで引用しているのはダイジェスト版であり、一部のプログラムコードが省略されています。 まずは TUtauData int main(int oArgC, char* oArgV[]){ // パイプファイルの内容全体を管理するクラス TUtauData aUtauData; // パイプファイルの内容を読み込む if ( aUtauData.SetTo(oArgV[1]) != B_OK ) { echo("パイプファイルを読み込めません。"); return -1; } Lib UTAU の中心となるクラスは TUtauData であり、UTAU 本体から受け取るパイプファイルの内容をすべて管理するクラスです。 Lib UTAU を利用する場合、まずは TUtauData のインスタンスを生成するところから始めます(4 行目)。 続いて、SetTo() 関数でパイプファイルの内容をすべて読み込みます(7 行目)。UTAU 本体からプラグインへ、パイプファイル名がコマンドライン引数として渡されますので、そのファイル名を SetTo() 関数に渡します。 Lib UTAU 全体を通じて言えることですが、文字列は全て、マルチバイト文字(char)です。ワイド文字(wchar_t)ではありません。ファイル名もマルチバイト文字で渡して下さい。 SetTo() 関数は正常にパイプファイルを読み込めると、定数 B_OK を返してくるので、B_OK 以外が返ってきた場合はエラーとしてプログラムを終了します。 [#SETTING] セクションの管理 // [#SETTING] セクションの内容を管理するクラス const TUtauSectionSettings* aSettings; aSettings = aUtauData.SectionSettings(); // [#SETTING] セクションからテンポ(double 型)を取得してみる double aTempo; if ( aSettings- GetValue(KEY_NAME_TEMPO, aTempo) == B_OK ) { echo("テンポを取得できました:"+num_to_string(aTempo)); } else { echo("テンポが設定されていません。"); } 最初に、パイプファイルの [#SETTING] セクションの情報を取得してみましょう。 [#SETTING] セクションを管理するクラスは TUtauSectionSettings です。TUtauData SectionSettings() 関数で、TUtauSectionSettings へのポインタを取得できます(3 行目)。 [#SETTING] セクションはリードオンリーなので、TUtauSectionSettings のポインタ変数を宣言する際は const 付きにしておいて下さい。 [#SETTING] セクションに記録されている情報を取得するには、GetValue() 関数を使います(7 行目)。 GetValue() の第 1 引数は、取得したい情報の名称です。テンポを取得する時は KEY_NAME_TEMPO を渡します。KEY_NAME_TEMPO は Lib UTAU で定義されている定数で、実体は "Tempo" です。パイプファイルの中身は「Tempo=120.00」などとなっていますが、ここの名称をそのまま渡せば情報を取得できるということです。 GetValue() の第 2 引数は、取得した値の格納場所です。テンポは小数なので、double 型変数へのポインタを渡すことで、この変数にテンポが格納されます。 8 行目では、取得したテンポを表示しています。echo() 関数は Lib UTAU の関数ではなく、サンプルプログラムで定義している関数です。通常なら cout で良いのですが、ライブラリ作者の環境ですと、cout だと UTAU から起動された場合に値が表示されなかったので、echo() 関数内でメッセージボックスを表示しています。 num_to_string() 関数は Lib UTAU のサポート関数で、数値を文字列(string 型)に変換します。boost が使える環境でしたら、lexical_cast string 使えばいいだけなのですけどね。 音符セクションの管理 // 音符セクション([#0001] など)の内容を管理するクラス TUtauSectionNote* aNote; // UTAU で選択されている音符の歌詞(string 型)をすべて取得してみる string aLyric; string aAllLyric; for ( int32 i = aUtauData.SectionNotesNormalBegin() ; i aUtauData.SectionNotesNormalEnd() ; i++ ) { aNote = aUtauData.SectionNoteAt(i); if ( aNote- GetValue(KEY_NAME_LYRIC, aLyric) == B_OK ) { aAllLyric += aLyric; } else { echo("インデックス "+num_to_string(i)+" の歌詞が設定されていません。"); } } echo("歌詞:"+aAllLyric); それでは、パイプファイルの音符セクション([#0001] など)の情報を取得してみましょう。UTAU 本体で選択されているすべての音符の歌詞を繋げてみます。 音符セクションを管理するクラスは TUtauSectionNote です。パイプファイルにはたくさんの音符セクションが並んでいますが、TUtauData SectionNoteAt() 関数で、TUtauSectionNote へのポインタを取得できます(8 行目)。引数は、何番目の音符セクションかを示すインデックスで、0 から始まります。つまり、SectionNoteAt(0) で最初の音符セクションを取得できます。 したがって、SectionNoteAt(0)、SectionNoteAt(1)……SectionNoteAt(セクションの数-1) というように順に音符セクションを取得していけば、すべての音符セクションにアクセスできます。 ここで注意が必要なのは、[#PREV] セクションの存在です。ご承知の通り、[#PREV] は選択されている音符の前の音符を示します。 SectionNoteAt(0) が返す値は [#PREV] の可能性があります。[#PREV] セクションが不要な場合は、SectionNotesNormalBegin() 関数の出番です(7 行目)。この関数は、[#PREV] セクションを除いた最初のセクションのインデックスを返します。したがって、SectionNoteAt(SectionNotesNormalBegin()) で、[#PREV] セクションを除いた最初の音符セクションを取得することができます。 同様のことが末尾の [#NEXT] セクションについても言えます。そして、SectionNotesNormalEnd() 関数が、[#NEXT] セクションを除いたインデックスの最大値です。 SectionNotesNormalEnd() は STL の end() と同様に有効値の次の値を返すことに注意して下さい。つまり、SectionNoteAt(SectionNotesNormalEnd()) は不正です。SectionNoteAt(SectionNotesNormalEnd()-1) が末尾の音符セクションです。 さて、無事に先頭と末尾のインデックスが分かったので、7~14 行目のループに入ります。 ループの中で各音符の歌詞を取得していますが、歌詞の取得は GetValue() 関数です。 [#SETTING] セクションでテンポを取得した時も GetValue() 関数を使いました。関数名が同じなのは偶然でも何でもなく、実は、TUtauSectionSettings も TUtauSectionNote も、同じ TUtauSection クラスから派生しています。GetValue() 関数は TUtauSection クラスの関数なのです。 したがって、テンポの取得も歌詞の取得もやり方は変わりませんので、解説は省略します。テンポの時と違うのは、歌詞は文字列なので、第 2 引数に string 型へのポインタを渡しています。 パイプファイルのバージョン間の相違を吸収 // パイプファイルのバージョンを管理するクラス const TUtauSectionVersion* aVersion; aVersion = aUtauData.SectionVersion(); // 最初の音符のモジュレーション(int32 型)を取得してみる // UTAU 0.2.90(キー名は "Modulation")でも UTAU 0.2.75(キー名は "Moduration")でも取得できるようにする int32 aMod; aNote = aUtauData.SectionNoteAt(aUtauData.SectionNotesNormalBegin()); if ( aNote- GetValue(aVersion- CompatibilityKey(KEY_NAME_MODULATION), aMod) == B_OK ) { echo("モジュレーションを取得できました:"+num_to_string(aMod)); } else { echo("モジュレーションが設定されていません。"); } 次に、[#VERSION] セクションの管理について解説します。 [#VERSION] セクションを管理するクラスは TUtauSectionVersion です。TUtauData SectionVersion() 関数で、TUtauSectionVersion へのポインタを取得できます(3 行目)。 [#VERSION] セクションはリードオンリーなので(UTAU の仕様上リードオンリーなのかは不明ですが、Lib UTAU ではリードオンリーとして扱っています)、TUtauSectionVersion のポインタ変数を宣言する際は const 付きにしておいて下さい。 さて、UTAU のバージョン(パイプファイルのバージョン)によって、パイプファイルの記述が少しずつ変わってきます。差異を考慮してプログラムを組むのは大変ですが、TUtauSectionVersion は、差異吸収作業を手助けする機能を持っています。 それが CompatibilityKey() 関数です。CompatibilityKey() は、最新の UTAU でのキー名を渡すと、現在読み込んでいるパイプファイルのバージョンに合わせたキー名を返してくれます。 例えば、モジュレーションは、UTAU 0.2.90 では "Modulation" ですが、UTAU 0.2.75 では "Moduration" です(l と r の違い)。 CompatibilityKey() に最新の "Modulation" を表す KEY_NAME_MODULATION を渡し、CompatibilityKey(KEY_NAME_MODULATION) とすると、UTAU 0.2.90 のパイプファイルを読み込んでいる場合は KEY_NAME_MODULATION が返り、UTAU 0.2.75 のパイプファイルを読み込んでいる場合は KEY_NAME_MODURATION が返ります。 つまり、音符セクションからモジュレーションを取得する際、GetValue(aVersion- CompatibilityKey(KEY_NAME_MODULATION), aMod) とすることで、UTAU 0.2.90 だろうと UTAU 0.2.75 だろうと気にせず、モジュレーションの値を取得することができます(9 行目)。 なお、モジュレーションは整数なので、GetValue() の第 2 引数には int32 型へのポインタを渡しています。int32 は要するに long です。short や long だと型の大きさが直感的に分かりづらいので、Lib UTAU では int8、int16、int32 というような表記を用いています。 実のところ、現在、CompatibilityKey() は KEY_NAME_MODULATION を変換する機能しかありません。なんとなく、他にもバージョン間で差異のあるプロパティはある気がしていますが、いまいち把握できていないので、実装できていません。コメント投稿ページで差異を具体的に教えていただければ(UTAU のバージョンとプロパティ名など)、対応を検討させていただきます(必ずしも対応できるとは限りません)。 値の設定 // UTAU で選択されている音符の音の強さ(int32 型)をすべて半分にする int32 aIntensity; for ( int32 i = aUtauData.SectionNotesNormalBegin() ; i aUtauData.SectionNotesNormalEnd() ; i++ ) { aNote = aUtauData.SectionNoteAt(i); if ( aNote- GetValue(KEY_NAME_INTENSITY, aIntensity) == B_OK ) { if ( aNote- SetValue(KEY_NAME_INTENSITY, aIntensity/2) != B_OK ) { echo("インデックス "+num_to_string(i)+" の音の強さを設定できませんでした。"); } } else { echo("インデックス "+num_to_string(i)+" の音の強さが設定されていません。"); } } echo("音の強さを半分にしました。"); これまで値の取得について見てきましたが、今度は、値の設定について解説します。UTAU で選択されている音符の音の強さを、すべて現在の半分に設定してみます。 3~12 行目のループの回し方は、全ての音符の歌詞を取得した時と同じやり方です。 5 行目で、音符の音の強さ(KEY_NAME_INTENSITY)を取得し、int32 型の変数 aIntensity に格納しています。 6 行目が音の強さを設定している箇所です。値の設定には SetValue() 関数を使います。GetValue() 関数と使い方はほとんど同じで、第 1 引数がキー名です。音の強さを設定したいので KEY_NAME_INTENSITY を渡しています。第 2 引数が設定したい値で、現在の半分にしたいので、先ほど取得した aIntensity を 2 で割って渡しています。GetValue() と異なり、SetValue() では第 2 引数は値渡しです。 パイプファイルへの書き戻し // 変更内容をパイプファイルに書き戻す if ( aUtauData.Export(oArgV[1]) == B_OK ) { echo("パイプファイルに変更内容を保存しました。"); } else { echo("パイプファイルに変更内容を保存できませんでした。"); } 設定した値を UTAU 本体に返すには、パイプファイルを更新します。 パイプファイルに変更点を書き出す関数は、TUtauData Export() です(2 行目)。Export() 関数は、TUtauData の全てを書き出すのでは無く、SetValue() で更新されたプロパティのみ書き出します。 以上で、サンプルプログラムの解説を終わります。 追記予定 先行発声やオーバーラップも考慮し、さらに食い込み補正も計算に入れた実質の音符の長さを算出する TUtauSectionNote GetCorrectedDuration() 食い込み補正を計算に入れた値を取得する TUtauSectionNote GetCorrectedPreUtterance()、GetCorrectedVoiceOverlap() 「10,10,10,20,30,50,60,%,10,10,40」というエンベロープの表記を「(10, 20) (20, 30) (30, 40) (475, 50) (485, 60)」というように分かりやすく解釈する TUtauSectionNote GetCorrectedEnvelope() PBS、PBW、PBY に散らばっているピッチベンドをまとめる TUtauSectionNote GetCorrectedPitch()
https://w.atwiki.jp/momonemomo/pages/58.html
桃音モモの音源データをインストールしたら、さっそくUTAUで使ってみましょう。 UTAUの音源として「桃音モモ連続発声090726+Lite」を選択する UTAUは複数の音源データをインストールして、それらを切り替えて使うことができます。 桃音モモに歌わせたいときは、あらかじめUTAUの設定で桃音モモの音源データを選んでおく必要があります。1.デスクトップの「UTAU - 歌声合成ツール」アイコンをダブルクリックします。 UTAUが起動します。 初めてUTAUを起動したときは「ReadMe.txt」が表示されます。2.「プロジェクト」メニューの「プロジェクトのプロパティ」をクリックします。 「プロジェクトの設定」が表示されます。3.「原音ファイルセット」のをクリックし、表示されたプルダウンメニューで「桃音モモ連続発声090726+Lite」をクリックします。4.「OK」をクリックします。 これで桃音モモの音源データが選択されました。 UTAUのウインドウの右上(「ファイル」メニューの下)に、「桃音モモ連続発声090726+Lite」と表示されていることを確認してください。 これで桃音モモをUTAUで使うための準備は完了です。
https://w.atwiki.jp/libutau/pages/22.html
Lib UTAU を用いて作成されているソフトウェア唄詠 うたりす すっぴんプラグイン 鼻歌採譜プラグイン Lib UTAU を用いて作成されているソフトウェア ここでは、Lib UTAU を用いて作成されているプラグインなどをご紹介します。 Lib UTAU を用いてプラグインなどを作成された場合、お知らせいただければ、こちらでご紹介させていただきます。 唄詠 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (around) テキストスピーチソフト(棒読みちゃんなど)の声として、UTAU 音源を当てられるようにするためのソフトです。 作者 SHINTA ホームページ http //www2u.biglobe.ne.jp/~shinta/soft/UtaYomi_JPN.html 登録日 2014/01/19 うたりす #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (around) WAVE トレース方式 の UTAU 自動調声プラグインです。 自分の歌声を録音した WAVE を指定することで、自分の歌唱ニュアンスを UTAU データに反映することが出来ます。 作者 SHINTA ホームページ http //www2u.biglobe.ne.jp/~shinta/soft/UTALis_JPN.html 登録日 2011/05/08 すっぴんプラグイン #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (around) UTAU の音符データに施した調整をすべて除去し、「ベタ打ち」状態に戻すプラグインです。 「音の長さ(Length)」「音の高さ(NoteNum)」「歌詞(Lyric)」以外のプロパティをすべてデフォルト値に戻します。 作者 SHINTA ホームページ http //www2u.biglobe.ne.jp/~shinta/soft/SuppinPlugin_JPN.html 登録日 2011/05/15 備考 ソースコード公開 鼻歌採譜プラグイン #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (around) 「た~たたた♪」というように歌詞をすべて「た」にして歌ったものを WAVE ファイルに録音しておき、その WAVE ファイルを解析することにより、歌の音長・音程を UTAU に自動入力します。 いわゆる、鼻歌入力、自動採譜、耳コピ支援ツールです。 作者 SHINTA ホームページ http //www2u.biglobe.ne.jp/~shinta/soft/SaiLis_JPN.html 登録日 2012/12/03
https://w.atwiki.jp/utau2008/pages/2.html
メニュー トップページ 初歩質問と答え トラブルシューティング 機能のQ A その他のQ&A 原音ファイルセット (UTAU用音声ライブラリ) 調声アドバイス 原音設定アドバイス UTAU用音源の作成 2ch関連スレ集 リンク UTAUについて(作者ブログ) UTAUダウンロード UTAU交流掲示板 UTAU操作マニュアル UTAUユーザー互助会@ウィキ UTAU Radio Station 麗歌美華 まとめ Wiki ニコニコ動画VOCALOID関連作品「○○P」リスト Wiki UTAU楽曲データベース UTAU放送局wiki 中の人をプロデュース-UTAU向け音源製作支援サイト- 更新履歴 取得中です。 統計 - 本日 - 昨日 - 現在 -人が閲覧中 ここを編集
https://w.atwiki.jp/utauuuta/pages/594.html
はなれしらず【登録タグ は はてな 曲 雷歌ヒビキ】 作詞:はてな 作曲:はてな 唄:雷歌ヒビキ 曲紹介 個人的にC4裏の声に合う曲作りたかったのです。(作者コメントより) 伴奏はUTAU楽器音声ライブラリの香味ギター。 歌詞 背中に沿って土を詰めては 最後に伝う言葉を探す 容(かたち)の無い板を溶かして また紡いだら君の眼になる 首の中の疎ら(まばら)な糸が 喉を閉ざす届かないまま 舌を切って奥で泣いたら これからまた二つに換わる 遠くの声迫る別れ 君だけが知ってるから 同じ筈の容(かたち)が解いて消えても 探す意味も無い 唯 付いて行くだけ このままでまた 残る右手これで最後 その喉を取って 流す水はここには無い 新しい飾り 纏う 同じ筈の容(かたち)が解いて消えても 探す意味も無い 唯 付いて行くだけ このままでまた (動画内歌詞より転載) コメント 名前 コメント